package com.project.springboot.utils;

import java.util.Collection;
import java.util.Map;

/**
 * @description Java对象空判断工具
 * @author 朱正磊
 * @date 2018年5月28日 下午6:12:51
 */
public class AssertUtil {

	/**
	 * @description 私有化构造函数不允许被实例化
	 */
	private AssertUtil() {}

	/**
	 * @description 判断集合对象是否为空
	 * @param collection 集合对象
	 * @return 如果集合对象为null或者集合元素个数为0，那么返回true，否则返回false
	 */
	public static boolean isEmpty(Collection<?> collection) {
		return isNull(collection) || collection.size() < 1;//collection.size()==0和collection.isEmpty()等价
	}
	
	/**
	 * @description 判断Map对象是否为空
	 * @param map Map对象
	 * @return 如果Map对象为null或者Map键值对个数为0，那么返回true，否则返回false
	 */
	public static boolean isEmpty(Map<?, ?> map) {
		return isNull(map) || map.size() < 1;//map.size()==0和map.isEmpty()等价
	}

	/**
	 * @description 判断对象是否为空
	 * @param object 对象
	 * @return 
	 */
	public static boolean isEmpty(Object object) {
		if (object instanceof Collection) {
			return isEmpty((Collection<?>) object);
		} else if (object instanceof Map) {
			return isEmpty((Map<?, ?>) object);
		}
		return isNull(object) || "".equals(object);
	}

	/**
	 * @description 判断数组是否为空
	 * @param object 数组对象
	 * @return 如果数组对象为null或者数组元素个数为0，那么返回true，否则返回false
	 */
	public static boolean isEmpty(Object[] object) {
		return isNull(object) || object.length < 1;
	}

	/**
	 * @description 判断字符串是否为空
	 * @param text 字符串对象
	 * @return 如果字符串为null或者字符串长度为0，那么返回true，否则返回false
	 */
	public static boolean isEmpty(String text) {
		return isNull(text) || text.trim().length() < 1;
	}

	/**
	 * @description 判断集合对象是否不为空
	 * @param collection
	 * @return
	 */
	public static boolean isNotEmpty(Collection<?> collection) {
		return !isEmpty(collection);
	}

	/**
	 * @description 判断Map对象是否不为空
	 * @param map
	 * @return
	 */
	public static boolean isNotEmpty(Map<?, ?> map) {
		return !isEmpty(map);
	}

	/**
	 * @description 判断对象是否不为空
	 * @param object
	 * @return
	 */
	public static boolean isNotEmpty(Object object) {
		return !isEmpty(object);
	}

	/**
	 * @description 判断数组对象是否不为空
	 * @param object
	 * @return
	 */
	public static boolean isNotEmpty(Object[] object) {
		return !isEmpty(object);
	}

	/**
	 * @description 判断字符串对象是否不为空
	 * @param text
	 * @return
	 */
	public static boolean isNotEmpty(String text) {
		return !isEmpty(text);
	}

	/**
	 * @description 判断对象是否为null
	 * @param object
	 * @return
	 */
	private static boolean isNull(Object object) {
		return object == null;
	}

}
